//
//  CHSLayerContentController.m
//  ZXAnimationUtil_Example
//
//  Created by 朱新明 on 2023/9/10.
//  Copyright © 2023 simon. All rights reserved.
//

#import "CHSLayerContentController.h"
#import <ZXCategoriesUtil/CAICategories.h>
#import <Masonry/Masonry.h>
#import "CHSLayerContentDetailController.h"

@interface CHSLayerContentController ()<UITableViewDataSource,UITableViewDelegate>



@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSMutableArray *dataMArray;

@end

@implementation CHSLayerContentController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self setUI];
    [self setData];
}

- (void)setUI
{
    self.navigationItem.title = @"设置图层内容";
    self.view.backgroundColor = [UIColor zx_colorWithHexString:@"#FDFEFF"];
    
    [self.view addSubview:self.tableView];
    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(self.view.mas_left).with.offset(0);
        make.centerX.mas_equalTo(self.view.mas_centerX);
        make.top.equalTo(self.view.mas_top).with.offset(0);
        make.bottom.equalTo(self.view.mas_bottom);
    }];
}


#pragma mark - Data

- (void)setData
{
    NSArray *arr = @[
        @{@"layer1":@"1.将image(图像)对象直接分配给图层对象的contents属性。(这种技术最适用于从未或很少改变的图层内容。)\n 因为图层只是一个管理位图图像的容器，所以你可以将图像直接分配给图层的contents属性。"},
        @{@"layer2":@"2.给图层指定一个委托对象，并让委托绘制图层的内容。(这种技术最适用于可能周期性变化的层内容，并且可以由外部对象(如视图)提供。) \n如果图层的content（内容）动态变化，可以使用委托对象在需要时提供和更新该content。\n*如果你的委托实现displayLayer:方法，该实现负责创建位图并将其赋值给图层的contents属性。\n*如果你的委托实现了drawLayer:inContext:方法，Core Animation会创建一个位图，创建一个图形上下文来绘制那个位图，然后调用你的委托方法来填充位图。委托方法所要做的就是绘制到提供的图形上下文中。\n委托对象必须实现displayLayer:或drawLayer:inContext:方法。如果委托同时实现了displayLayer:和drawLayer:inContext:方法，则层只调用displayLayer:方法。"},
        @{@"layer3":@"3.也是委托方式，对于具有自定义内容的layer-backed views（基于图层的视图-例如系统UIView），您应该继续重写视图的方法来完成绘图。layer-backed views（基于图层的视图）会自动使自己成为其层的委托，并实现所需的委托方法，您不应该更改该配置。相反，你应该实现视图的drawRect:方法来绘制内容。"},
        @{@"layer4":@"4.定义一个图层子类并重写它的一个绘图方法来提供自己的图层内容。(如果你必须创建一个自定义图层子类，或者如果你想改变图层的基本绘图行为，这种技术是合适的。)\n当子类化时，你可以使用以下两种技术来绘制你的图层内容:\n(1)重写图层的dispaly方法，并使用它直接设置图层的contents属性。\n(2)重写图层的drawInContext:方法，并使用它来绘制提供的图形上下文。"},
    ];
    self.dataMArray = [NSMutableArray arrayWithArray:arr];
    //    self.dataMArray = [NSMutableArray array];
    [self requestData];
}

- (void)requestData
{
    [self.tableView reloadData];
    
}


#pragma mark -

- (UITableView *)tableView
{
    if (!_tableView)
    {
        UITableView *view = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
        view.backgroundColor = self.view.backgroundColor;
        view.delegate = self;
        view.dataSource = self;
        view.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
        view.showsVerticalScrollIndicator = NO;
//        [view registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
        view.estimatedRowHeight = 87;
        view.rowHeight = UITableViewAutomaticDimension;
        if (@available(iOS 15.0, *)) {
            view.sectionHeaderTopPadding = 0;
        } else {
            // Fallback on earlier versions
        }
        _tableView = view;
    }
    return _tableView;
}



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.dataMArray.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }
    NSDictionary *dic = [self.dataMArray objectAtIndex:indexPath.row];
    NSString *value = [dic.allValues firstObject];
    cell.textLabel.text = value;
    cell.textLabel.numberOfLines = 0;
    return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
     return UITableViewAutomaticDimension;
}

//- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
//    return @"图层是管理应用程序提供的内容的数据对象。图层的内容由包含你想要显示的可视化数据的位图组成。您可以通过以下三种方式之一为该位图提供内容:";
//    return @"图层是管理";
//}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
    
    UITableViewHeaderFooterView *view = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@"header"];
    if (!view) {
        view = [[UITableViewHeaderFooterView alloc] initWithReuseIdentifier:@"header"];
    }

    if (@available(iOS 14.0, *)) {
        UIListContentConfiguration *configuration = view.defaultContentConfiguration;
        configuration.image = [UIImage imageNamed:@"keyframing_2"];
        configuration.imageProperties.maximumSize = CGSizeMake(40, 40);
        configuration.text = @"图层是管理应用程序提供的内容的数据对象。图层的内容由包含你想要显示的可视化数据的位图组成。您可以通过以下三种方式之一为该位图提供内容:";
        configuration.textProperties.numberOfLines = 0;
        configuration.textProperties.color = UIColor.orangeColor;
        configuration.secondaryText = @"副标题";
        view.contentConfiguration = configuration;
    } else {
        //有bug，换行不起作用了。
        // Fallback on earlier versions
        UILabel *label = view.textLabel;
        label.text = @"图层是管理应用程序提供的内容的数据对象。图层的内容由包含你想要显示的可视化数据的位图组成。您可以通过以下三种方式之一为该位图提供内容:";
        label.numberOfLines = 0;
        label.textColor = UIColor.redColor;
    }

    return view;
}

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section{
//    UITableViewHeaderFooterView *headerView = (UITableViewHeaderFooterView *)view;
//    headerView.backgroundColor = [UIColor redColor];
//    headerView.textLabel.textAlignment = NSTextAlignmentCenter;
//    headerView.textLabel.numberOfLines = 0;

}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 12;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    return nil;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    NSDictionary *dic = [self.dataMArray objectAtIndex:indexPath.row];
    NSString *key = [dic.allKeys firstObject];
    CHSLayerContentDetailController *vc = [CHSLayerContentDetailController new];
    vc.type = indexPath.row;
    [self.navigationController pushViewController:vc animated:YES];
}




/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end
